基于STM32F103入门1

您所在的位置:网站首页 stm32f103 上拉输入 基于STM32F103入门1

基于STM32F103入门1

2023-07-23 15:38| 来源: 网络整理| 查看: 265

今天学习了STM32固件库点灯程序 点灯也可以玩过很多好玩的东西,在这里做一下总结。

STM32点灯程序合集 1:新建固件库工程文件1.1找到一个固件库模板1.2:打开KEIL5新建工程1.3:添加相关文件1.4:手动添加其他文件路径进来 2:STM32固件库点灯2.1: 方式1点灯main.c 2.2 :方式2点灯main.c 2.3 :方式3点灯main.c 点灯效果3:STM32闪烁灯delay.cmain.c 闪烁灯效果 4:STM32呼吸灯main.c 呼吸灯效果 5:STM32按键点灯key.cmain.c 按键点灯效果 6:STM32震动感应灯需要材料:6.1:震动传感器2.继电器灯 代码shake.crelay.cmain.c 如何接线项目效果

1:新建固件库工程文件 1.1找到一个固件库模板

在这里插入图片描述

1.2:打开KEIL5新建工程

在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述 最终效果: 在这里插入图片描述

1.3:添加相关文件

然后我们针对不同文件夹 我们添加不同的文件进来。 双击STARTUP 添加我们固件库的启动文件

STARTUP:添加Libraries——>CMSIS——>startup中的启动文件 在这里插入图片描述

USER:添加固件库的User文件夹中的.c文件

CMSIS 添加Libraries——>CMSIS文件夹中的.c文件 DOC:添加固件库中Doc文件夹的readme.txt FWLIB:添加Libraries——>STM32F10x_StdPeriph_Driver文件夹中的.c文件

添加完效果 在这里插入图片描述

1.4:手动添加其他文件路径进来

打开stm32f0x.h文件 在这里插入图片描述

按 Ctrl + F 查找 stm32f10x_conf

会调到一下的代码 我们得宏定义加载一下 在这里插入图片描述 在这里插入图片描述 添加其他文件夹.h路径 在这里插入图片描述 这样就是新建固件库工程文件完成了。。。。。 下面就开始点灯 点灯 点灯 下面就开始点灯 点灯 点灯 下面就开始点灯 点灯 点灯

2:STM32固件库点灯

首先你得有个固件库手册来参考 我这里直接上代码。 在这里插入图片描述 我这个用的STM32C8T6板子 PC13是LED灯 根据原理图 给个低电平则点亮

LED配置代码 led.c

#include "stm32f10x.h" #include "led.h" void LED_Init(void) { //1.打开控制GPIOC的时钟(APB2) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //2.配置结构体 GPIO_InitTypeDef led_init; led_init.GPIO_Pin = GPIO_Pin_13; //GPIOC13引脚 led_init.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 led_init.GPIO_Speed = GPIO_Speed_10MHz; //10MHz //3.对成员进行初始化 GPIO_Init(GPIOC, &led_init); }

led.h

#ifndef _LED_H_ #define _LED_H_ #include "stm32f10x.h" void LED_Init(void); //LED初始化函数声明 #endif 2.1: 方式1点灯 main.c #include "stm32f10x.h" #include "led.h" int main() { LED_Init(); //LED初始化 while(1) { //方式1 //GPIO_SetBits(GPIOC,GPIO_Pin_13); //P13引脚输出高电平 GPIO_ResetBits(GPIOC, GPIO_Pin_13); //P13引脚输出低电平 } } 2.2 :方式2点灯 main.c #include "stm32f10x.h" #include "led.h" int main() { LED_Init(); //LED初始化 while(1) { //方式2 //GPIO_WriteBit(GPIOC,GPIO_Pin_13, Bit_SET); //P13引脚输出高电平 GPIO_WriteBit(GPIOC,GPIO_Pin_13, Bit_RESET); //P13引脚输出低电平 } } 2.3 :方式3点灯 main.c #include "stm32f10x.h" #include "led.h" int main() { LED_Init(); //LED初始化 while(1) { //方式3 //GPIO_Write(GPIOC, 0X2000); //P13引脚输出高电平 GPIO_Write(GPIOC, 0X0000); //整组端口输出低电平 } } 点灯效果

在这里插入图片描述

3:STM32闪烁灯

加一个延时函数 我们就可以做一个 LED闪烁效果了 这里的延时我们没有用到定时器 ,只是简单的通过循环来延时。

delay.c #include "stm32f10x.h" #include "delay.h" void delay_ms(uint16_t time) { uint16_t i = 0; while(time--) { i = 10000; while(i--); } } main.c #include "stm32f10x.h" #include "led.h" #include "delay.h" int main() { LED_Init(); //LED初始化 while(1) { GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮 delay_ms(1000); //亮灯大约1秒 GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED熄灭 delay_ms(1000); //熄灭灯大约1秒 } } 闪烁灯效果

在这里插入图片描述

4:STM32呼吸灯

呼吸灯就像我们人呼吸那样,我们可以让灯慢慢的亮 慢慢的暗,这个就是通过占空比来调节。(可以理解为LED高电平时间和LED低电平时间) 比如 LED 亮延时100us 然后 暗 100us 这时候他们占空比是百分之50. 那如果我们 LED 亮10us 然后暗 还是100us 这个时候 你会发现 LED灯变暗了很多。 这个其实是我们的视觉暂停 原因导致的。 所以我们可以通过调节 LED点亮的时间 和 LED 熄灭的时间的比例来调节,让LED 慢慢的亮 然后 慢慢的 暗。

慢慢的亮 意思就是 LED的低电平时间慢慢的增加。 比如从1us 慢慢 到500us 然后LED高电平时间则是 从500us 慢慢到1us。 如果是想着LED灯 亮慢慢 暗 则相反。

main.c #include "stm32f10x.h" #include "led.h" #include "delay.h" int main() { LED_Init(); //LED初始化 unsigned char i = 0; unsigned int t = 1; unsigned char flag = 1; while(1) { if(flag == 1) //LED由暗到亮 { for(i=0;i flag = 0; } } if(flag == 0) //LED由亮到暗 { for(i=0;i flag = 1; } } } } 呼吸灯效果

在这里插入图片描述

5:STM32按键点灯

我们玩了呼吸灯 也可以玩玩按键点灯,按键其实也是挺简单的,我用的按键是只有两个引脚的,我们任意的一脚接单片机的GND ,另一个接单片机的GPIO 当按下按键 这个GPIO则会是低电平。 那我们就检测这个GPIO是否是低电平 如果是 我们则点亮LED灯。

key.c #include "stm32f10x.h" #include "key.h" /*按键初始化函数*/ void KEY_Init(void) { //1.打开控制GPIOA的时钟(APB2) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //2.配置结构体 GPIO_InitTypeDef key_init; key_init.GPIO_Pin = GPIO_Pin_5; //GPIOC13引脚 key_init.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 //led_init.GPIO_Speed = GPIO_Speed_10MHz; //10MHz //3.对成员进行初始化 GPIO_Init(GPIOA, &key_init); } main.c #include "stm32f10x.h" #include "led.h" #include "key.h" #include "delay.h" int main() { LED_Init(); //LED初始化 KEY_Init(); //按键初始化 GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED设置高电平 GPIO_SetBits(GPIOA,GPIO_Pin_5); //按键设置高电平 while(1) { //如果按键被按下 if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) == 0) { delay_ms(20); //消抖再次判断是否按下 if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) == 0) { GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮 delay_ms(1000); //延时大约1秒 } } else { GPIO_SetBits(GPIOC,GPIO_Pin_13); //LED熄灭 } } } 按键点灯效果

在这里插入图片描述

6:STM32震动感应灯 需要材料: 6.1:震动传感器

在这里插入图片描述

2.继电器

(我用的这个是高电平导通) 在这里插入图片描述

这种是震动传感器,我们可以也通过震动来点灯,我用的这个模块是当发生震动时,会变成低电平。那其实就是相当于我们的按键,我们去检测一下这个模块到底是不是低电平如果是低电平,那么我们让LED灯点亮1秒啥的都有可以。 直接上代码: 配置震动传感器模块代码

代码 shake.c #include "stm32f10x.h" #include "shake.h" /*震动传感器初始化函数*/ void SHAKE_Init(void) { //打开GPIOC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //配置结构体 GPIO_InitTypeDef shake_init; shake_init.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 shake_init.GPIO_Pin = GPIO_Pin_3; //A3引脚 //shake_init.GPIO_Speed = GPIO_Speed_50MHz; //成员初始化 GPIO_Init(GPIOA, &shake_init); }

继电器模块配置代码:

relay.c #include "relay.h" /*继电器模块初始化函数*/ void RELAY_Init(void) { //打开时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //配置结构体 GPIO_InitTypeDef relay_init; relay_init.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 relay_init.GPIO_Pin = GPIO_Pin_4; //3引脚 relay_init.GPIO_Speed = GPIO_Speed_50MHz; //成员初始化 GPIO_Init(GPIOA, &relay_init); } main.c #include "stm32f10x.h" #include "led.h" #include "relay.h" #include "delay.h" #include "shake.h" /*主程序入口*/ int main() { LED_Init(); //LED模块初始化 RELAY_Init();//继电器模块初始化 SHAKE_Init();//震动传感器初始化 GPIO_SetBits(GPIOC, GPIO_Pin_13); //LED高电平 GPIO_SetBits(GPIOA, GPIO_Pin_3); //震动传感器高电平 GPIO_ResetBits(GPIOA, GPIO_Pin_4); //继电器低电平(关闭) while(1) { if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3) == 0) { GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮 GPIO_SetBits(GPIOA, GPIO_Pin_4); //继电器导通 (高电平) delay_ms(1000); } else { GPIO_SetBits(GPIOC, GPIO_Pin_13); //LED不亮 GPIO_ResetBits(GPIOA, GPIO_Pin_4); //继电器不导通 (低电平) } } } 如何接线 STM32震动传感器3.3VVCCGNDGNDA3DO STM32继电器5VVCCGNDGNDA4INGND公共端 STM32LED灯3.3V正极 继电器LED灯常开端负极 项目效果

在这里插入图片描述

如果觉得这篇文章对你有用。欢迎大家点赞、评论哈哈

需要整个工程代码和 模块的相关资料,私信我 或者 +我扣扣:844797079 。或者评论区留下的你的联系方式。

继续加油!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3